/*
 * @Author: zengxiaorong zxr1543109808@163.com
 * @Date: 2025-05-13 11:51:15
 * @LastEditors: zengxiaorong zxr1543109808@163.com
 * @LastEditTime: 2025-05-15 15:50:40
 * @FilePath: \big-screen-interface\vite.config.js
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import viteCompression from 'vite-plugin-compression'
import commonjs from 'vite-plugin-commonjs';
import path from 'path';
import viteImagemin from 'vite-plugin-imagemin';
import imagemin from 'imagemin'
import imageminUpng from 'imagemin-upng'// 只能压缩静态的png格式的图

export default defineConfig({
  base: './', // 如果项目部署在 /subpath/ 下，可以这样配置： base: '/subpath/'
  // base:'/scdtyz/',
  plugins: [
    commonjs(),
    vue(),
    viteCompression({
      algorithm: 'gzip', // 使用 gzip 压缩
      ext: '.gz', // 生成的文件扩展名
      threshold: 10240, // 只有大于该值的资源才会被压缩，单位为字节 10 KB
      deleteOriginFile: true, // 是否删除原始文件
    }),
    viteImagemin({
      gifsicle: {
        optimizationLevel: 7, // 设置 gif 压缩级别
      },
      optipng: {
        optimizationLevel: 7, // 设置 png 压缩级别
      },
      mozjpeg: {
        quality: 75, // 设置 jpg 压缩质量
      },
      pngquant: {
        quality: [0.65, 0.8], // 设置 png 压缩质量范围
        speed: 4,
      },
      svgo: {
        plugins: [
          {
            name: 'removeViewBox',
            active: false,
          },
          {
            name: 'removeEmptyAttrs',
            active: false,
          },
        ],
      },
      filter(file) {
        // 排除路径中包含 "assets/imgs/no-compress" 的文件
        // 同时不压缩 `.png` 文件
        return !file.includes('assets/imgs/no-compress') && !file.endsWith('.png');
      },
    }),
    {
      name: 'imagemin',
      apply: 'build',  // 仅在生产构建时应用
      async closeBundle() { // Vite构建完后运行优化
        const files = await imagemin(['dist/assets/*.png'], {
          destination: 'dist/assets',
          plugins: [
            imageminUpng({
              optimizationLevel: 2, // 优化级别，可调整
            }),
          ],
        })

        console.log('Optimized images:', files)
      },
    },
  ],
  server: {
    proxy: {
      '/api': {
        target: process.env.VITE_API_BASE_URL, // 使用环境变量
        changeOrigin: true, // 允许跨域
        rewrite: (path) => path.replace(/^\/api/, '') // 将 /api 去除
      }
    },
    hmr: true,  // 确保 HMR 被启用
    middlewareMode: false, //关闭开发服务器的缓存
    open: false, // 自动打开浏览器
  },
  resolve: {
    alias: {
      '@': path.resolve(__dirname, 'src'), // 设置别名 @ 指向 src 目录
      // '@components': resolve(__dirname, 'src/components'), // 示例：指向 components 目录
      // '@assets': resolve(__dirname, 'src/assets'), // 示例：指向 assets 目录
    }
  },
  build: {
    outDir: 'scdtyz', // 输出目录
    assetsDir: 'assets', // 静态资源目录（相对于outDir）
    sourcemap: false, // 生产环境下关闭 source map
    cssCodeSplit: true, // 启用 CSS 代码分割
    minify: 'terser', // 使用 terser 进行压缩
    assetsInlineLimit: 4096, // 小于此阈值的导入或引用资源将内联为 base64 编码，以避免额外的 http 请求。设置为 0 可以完全禁用此项。
    terserOptions: {
      compress: {
        drop_console: true,// 生产环境下去除console
        drop_debugger: true,// 生产环境下去除debugger生产环境下去除debugger
      }
    },
    rollupOptions: {
      output: {
        entryFileNames: 'assets/[name].[hash].js',
        chunkFileNames: 'assets/[name].[hash].js',
        assetFileNames: 'assets/[name].[hash].[ext]',
        manualChunks(id) {
          if (id.includes('node_modules')) {
            return 'vendor';
          }
        }
      }
    }
  },
  vite: {
    css: {
      preprocessorOptions: {
        scss: {
          api: 'modern-compiler', // or 'modern'
        },
      },
    },
  },
});
